/**
 *  Autor：厉高歌
 */
package com.ymatou.iapi.brand.testcase;


import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONObject;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;

import com.ymatou.iapi.brand.service.AddProductBrandCall;
import com.ymatou.iapi.brand.service.AddProductBrandTagCall;
import com.ymt.core.tool.Logger;
import com.ymt.utils.annotation.TestCase;
import com.ymt.utils.annotation.TestSuite;
import com.ymt.utils.tag.P1;
import com.ymttest.database.mongo.ProductBrandInfoWapper;
import com.ymttest.database.sqlwapper.YmtProductBrandWapper;
import com.ymttest.utils.YMTDateUtil;
@TestSuite
public class Ts_AddProductBrand {
	private static String dateformat ="yyyy-MM-dd HH:mm:ss.SSS";
	
	@BeforeClass
	public static void setUp() {
		Logger.createResultFile("添加标准品牌信息");
	}

	@Before
	public void caseUp() {
	}

	@AfterClass
	public static void tearDown() {
		Logger.generateResult(new AddProductBrandCall().getOpurl());
	}
	
	@After
	public void caseDown() {
		Logger.end();
	}

	 /**
	  * 成功添加一个标准品牌
	  */
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrand_001(){
		
		Logger.start(true,"成功添加一个标准品牌");
		try{
			//指定要修改的参数
			Map<String, Object> mm=new HashMap<String,Object>();
			mm.put("KeyWord", "Lgg");
			mm.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm.put("BrandEnName", "Adidas"+YMTDateUtil.getSysTime(dateformat));
			mm.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm.put("Operator", "Lgg");
			mm.put("BrandLogoUrl", "http://www.ymatou.com/BrandLogoUrl/"+YMTDateUtil.getSysTime(dateformat)+".jpg");		
			mm.put("BrandBannerUrl", "http://www.ymatou.com/BrandBannerUrl/"+YMTDateUtil.getSysTime(dateformat)+".jpg");		
			
			//添加品牌,并将返回的品牌ID保存下来
			Integer ReturnBrandId=AddProductBrandCall.callAndGetBrandId(mm);
			//查询SQL数据
			YmtProductBrandWapper ymtProductBrandWapper=new YmtProductBrandWapper();
			List <Map>sqlRet= ymtProductBrandWapper.getProductBrandByBrandId(ReturnBrandId);
			Logger.verifyNotNull(sqlRet, "根据添加返回的品牌ID可以查询到品牌数据");	
			Logger.verifyEquals(mm.get("KeyWord"), sqlRet.get(0).get("sKey"), "标准品牌关键字KeyWord，SQL落地验证 ");
			Logger.verifyEquals(mm.get("BrandName"), sqlRet.get(0).get("sBrand"), "标准品牌中文名sBrand，SQL落地验证 ");
			Logger.verifyEquals(mm.get("BrandEnName"), sqlRet.get(0).get("sBrandEn"), "标准品牌英文名BrandEnName，SQL落地验证 ");
			Logger.verifyEquals(mm.get("BrandDescription"), sqlRet.get(0).get("mBrandDescript"), "标准品牌描述信息BrandDescription，SQL落地验证 ");
			Logger.verifyEquals(mm.get("Operator"), sqlRet.get(0).get("sOperator"), "标准品牌操作人Operator，SQL落地验证 ");
			Logger.verifyEquals(mm.get("BrandLogoUrl"), sqlRet.get(0).get("sLogoUrl"), "标准品牌品牌Logo图BrandLogoUrl，SQL落地验证 ");
			Logger.verifyEquals(mm.get("BrandBannerUrl"), sqlRet.get(0).get("sBannerUrl"), "标准品牌品牌Logo图BrandBannerUrl，SQL落地验证 ");
			
			//查询Mongo数据落地
			ProductBrandInfoWapper productBrandInfoWapper=new ProductBrandInfoWapper();
			List <Map> mogRet=productBrandInfoWapper.getProductBrandInfoByBrandId(ReturnBrandId);
			Logger.verifyEquals(mm.get("KeyWord"), (mogRet.get(0)).get("KeyWord"), "标准品牌关键字KeyWord，Mongo落地验证");
			Logger.verifyEquals(mm.get("BrandName"), mogRet.get(0).get("BrandName"), "标准品牌中文名BrandName，Mongo落地验证");
			Logger.verifyEquals(mm.get("BrandEnName"), mogRet.get(0).get("BrandEnName"), "标准品牌英文名BrandEnName，Mongo落地验证");
			Logger.verifyEquals(mm.get("BrandDescription"), mogRet.get(0).get("BrandDescription"), "标准品牌描述信息BrandDescription，Mongo落地验证");
			Logger.verifyEquals(mm.get("Operator"), mogRet.get(0).get("AddUser"), "标准品牌操作人Operator，Mongo落地验证");
			Logger.verifyEquals(mm.get("BrandLogoUrl"), mogRet.get(0).get("BrandLogoUrl"), "标准品牌品牌Logo图BrandLogoUrl，Mongo落地验证");
			Logger.verifyEquals(mm.get("BrandBannerUrl"), mogRet.get(0).get("BrandBannerUrl"), "标准品牌品牌Logo图BrandBannerUrl，Mongo落地验证");
			//非传入数据落地验证，默认值验证
			Logger.verifyEquals(0, mogRet.get(0).get("Action"), "标准品牌新增记录Aciton默认为0，Mongo落地验证");
			//需要转换Mongo中取出的时间格式
			//Logger.verifyEquals(sqlRet.get(0).get("dAddTime"), mogRet.get(0).get("AddTime"), "标准品牌新增记录时间正确，Mongo落地验证");

		}catch (Exception e){
			Logger.fail(e);
		}
	}
	 
	/**
	  * 新建品牌的中文名与库里存在记录的品牌中文名重复，添加失败
	*/
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrand_002(){
		Logger.start(false,"新建品牌的中文名与库里存在记录的品牌中文名重复，添加失败");
		try{
			//指定要修改的参数
			Map<String, Object> mm1=new HashMap<String,Object>();
			mm1.put("KeyWord", "Lgg");
			mm1.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("BrandEnName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("Operator", "Lgg");
			mm1.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");		
			//添加品牌,并将返回的品牌ID保存下来
			Integer ReturnBrandId=AddProductBrandCall.callAndGetBrandId(mm1);
			YmtProductBrandWapper ymtProductBrandWapper=new YmtProductBrandWapper();
			List <Map>sqlRet= ymtProductBrandWapper.getProductBrandByBrandId(ReturnBrandId);
			//验证数据SQL落地成功
			Logger.verifyNotNull(sqlRet, "根据添加返回的品牌ID可以查询到品牌数据");	
			//新建品牌的中文名与库里存在记录的品牌中文名重复
			Map<String, Object> mm2=new HashMap<String,Object>();
			mm2.put("KeyWord", "Lgg");
			mm2.put("BrandName", mm1.get("BrandName"));
			mm2.put("BrandEnName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("Operator", "Lgg");
			mm2.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");	
			//添加相同品牌
			JSONObject ret2=AddProductBrandCall.callAndGetJsonRet(mm2);
			Logger.verifyNotEquals(200, ret2.get("Code"), "返回值不为200");

		}catch (Exception e){
			Logger.fail(e);
		}
		
	}

	/**
	  * 新建品牌的中文名与库里存在记录的品牌英文名重复，添加失败
	*/
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrand_003(){
		Logger.start(false,"新建品牌的中文名与库里存在记录的品牌英文名重复，添加失败");
		try{
			//指定要修改的参数
			Map<String, Object> mm1=new HashMap<String,Object>();
			mm1.put("KeyWord", "Lgg");
			mm1.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("BrandEnName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("Operator", "Lgg");
			mm1.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");		
			//添加品牌,并将返回的品牌ID保存下来
			Integer ReturnBrandId=AddProductBrandCall.callAndGetBrandId(mm1);
			YmtProductBrandWapper ymtProductBrandWapper=new YmtProductBrandWapper();
			List <Map>sqlRet= ymtProductBrandWapper.getProductBrandByBrandId(ReturnBrandId);
			//验证数据SQL落地成功
			Logger.verifyNotNull(sqlRet, "根据添加返回的品牌ID可以查询到品牌数据");	
			//新建品牌的中文名与库里存在记录的品牌中文名重复
			Map<String, Object> mm2=new HashMap<String,Object>();
			mm2.put("KeyWord", "Lgg");
			mm2.put("BrandName", mm1.get("BrandEnName"));
			mm2.put("BrandEnName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("Operator", "Lgg");
			mm2.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");	
			//添加相同品牌
			JSONObject ret2=AddProductBrandCall.callAndGetJsonRet(mm2);
			Logger.verifyNotEquals(200, ret2.get("Code"), "返回值不为200");
			
		}catch (Exception e){
			Logger.fail(e);
		}
	}
	
	/**
	  * 新建品牌的中文名与库里存在记录的品牌别名重复，添加失败
	*/
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrand_004(){
		Logger.start(false,"新建品牌的中文名与库里存在记录的品牌别名重复，添加失败");
		try{
			//新增一个标准品牌并且获取其品牌ID
			Integer ReturnBrandId=AddProductBrandCall.addProductBrandCall();
			YmtProductBrandWapper ymtProductBrandWapper=new YmtProductBrandWapper();
			List <Map>sqlRet= ymtProductBrandWapper.getProductBrandByBrandId(ReturnBrandId);
			//验证数据SQL落地成功
			Logger.verifyNotNull(sqlRet, "根据添加返回的品牌ID可以查询到品牌数据");	
			//定义添加品牌标签所需参数
			Map<String,Object> mm1=new HashMap<>();
			mm1.put("BrandId", ReturnBrandId);
			mm1.put("TagName", "品牌别名"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("Sort", (int)(Math.random()*10000));
			mm1.put("AddUser", "Lgg");
			AddProductBrandTagCall.addProductBrandTagCall(mm1);
			
			//新建品牌的中文名与库里存在记录的品牌中文名重复
			Map<String, Object> mm2=new HashMap<String,Object>();
			mm2.put("KeyWord", "Lgg");
			mm2.put("BrandName", mm1.get("TagName"));
			mm2.put("BrandEnName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("Operator", "Lgg");
			mm2.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");	
			//添加相同品牌
			JSONObject ret2=AddProductBrandCall.callAndGetJsonRet(mm2);
			//响应断言
			Logger.verifyNotEquals(200, ret2.get("Code"), "返回值不为200");
			Logger.verifyNotEquals("操作成功", ret2.get("Msg"), "响应信息返回值Msg不为：操作成功");
			
		}catch (Exception e){
			Logger.fail(e);
		}
	}
	
	
	/**
	  *新建品牌的英文名与库里存在记录的品牌中文名重复，添加失败
	*/
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrand_005(){
		Logger.start(false,"新建品牌的英文名与库里存在记录的品牌中文名重复，添加失败");
		try{
			//指定要修改的参数
			Map<String, Object> mm1=new HashMap<String,Object>();
			mm1.put("KeyWord", "Lgg");
			mm1.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("BrandEnName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("Operator", "Lgg");
			mm1.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");		
			//添加品牌,并将返回的品牌ID保存下来
			Integer ReturnBrandId=AddProductBrandCall.callAndGetBrandId(mm1);
			YmtProductBrandWapper ymtProductBrandWapper=new YmtProductBrandWapper();
			List <Map>sqlRet= ymtProductBrandWapper.getProductBrandByBrandId(ReturnBrandId);
			//验证数据SQL落地成功
			Logger.verifyNotNull(sqlRet, "根据添加返回的品牌ID可以查询到品牌数据");	
			//新建品牌的中文名与库里存在记录的品牌中文名重复
			Map<String, Object> mm2=new HashMap<String,Object>();
			mm2.put("KeyWord", "Lgg");
			mm2.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("BrandEnName", mm1.get("BrandName"));
			mm2.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("Operator", "Lgg");
			mm2.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");	
			//添加相同品牌
			JSONObject ret2=AddProductBrandCall.callAndGetJsonRet(mm2);
			Logger.verifyNotEquals(200, ret2.get("Code"), "返回值不为200");
			Logger.verifyNotEquals("操作成功", ret2.get("Msg"), "响应信息返回值Msg不为：操作成功");
		}catch (Exception e){
			Logger.fail(e);
		}
	}	
	
	/**
	  *新建品牌的英文名与库里存在记录的品牌英文名重复，添加失败
	*/
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrand_006(){
		Logger.start(false,"新建品牌的英文名与库里存在记录的品牌英文名重复，添加失败");
		try{
			//指定要修改的参数
			Map<String, Object> mm1=new HashMap<String,Object>();
			mm1.put("KeyWord", "Lgg");
			mm1.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("BrandEnName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("Operator", "Lgg");
			mm1.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");		
			//添加品牌,并将返回的品牌ID保存下来
			Integer ReturnBrandId=AddProductBrandCall.callAndGetBrandId(mm1);
			YmtProductBrandWapper ymtProductBrandWapper=new YmtProductBrandWapper();
			List <Map>sqlRet= ymtProductBrandWapper.getProductBrandByBrandId(ReturnBrandId);
			//验证数据SQL落地成功
			Logger.verifyNotNull(sqlRet, "根据添加返回的品牌ID可以查询到品牌数据");	
			//新建品牌的中文名与库里存在记录的品牌中文名重复
			Map<String, Object> mm2=new HashMap<String,Object>();
			mm2.put("KeyWord", "Lgg");
			mm2.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("BrandEnName", mm1.get("BrandEnName"));
			mm2.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("Operator", "Lgg");
			mm2.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");	
			//添加相同品牌
			JSONObject ret2=AddProductBrandCall.callAndGetJsonRet(mm2);
			Logger.verifyNotEquals(200, ret2.get("Code"), "返回值不为200");
			Logger.verifyNotEquals("操作成功", ret2.get("Msg"), "响应信息返回值Msg不为：操作成功");
		}catch (Exception e){
			Logger.fail(e);
		}
	}	
	
	/**
	  *新建品牌的英文名与库里存在记录的品牌别名重复，添加失败
	*/
	@Test
	@Category({P1.class})
	@TestCase
	public void Tc_AddProductBrand_007(){
		Logger.start(false,"新建品牌的英文名与库里存在记录的品牌别名重复，添加失败");
		try{
			//新增一个标准品牌并且获取其品牌ID
			Integer ReturnBrandId=AddProductBrandCall.addProductBrandCall();
			YmtProductBrandWapper ymtProductBrandWapper=new YmtProductBrandWapper();
			List <Map>sqlRet= ymtProductBrandWapper.getProductBrandByBrandId(ReturnBrandId);
			//验证数据SQL落地成功
			Logger.verifyNotNull(sqlRet, "根据添加返回的品牌ID可以查询到品牌数据");	
			//定义添加品牌标签所需参数
			Map<String,Object> mm1=new HashMap<String, Object>();
			mm1.put("BrandId", ReturnBrandId);
			mm1.put("TagName", "品牌别名"+YMTDateUtil.getSysTime(dateformat));
			mm1.put("Sort", (int)(Math.random()*10000));
			mm1.put("AddUser", "Lgg");
			AddProductBrandTagCall.addProductBrandTagCall(mm1);
			
			//新建品牌的英文名与库里存在记录的品牌别名重复，添加失败
			Map<String, Object> mm2=new HashMap<String,Object>();
			mm2.put("KeyWord", "Lgg");
			mm2.put("BrandName", "阿迪达斯"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("BrandEnName", mm1.get("TagName"));
			mm2.put("BrandDescription", "这是品牌描述信息"+YMTDateUtil.getSysTime(dateformat));
			mm2.put("Operator", "Lgg");
			mm2.put("BrandLogoUrl", "http://www.ymatou.com/"+YMTDateUtil.getSysTime(dateformat)+".jpg");	
			//添加相同品牌
			JSONObject ret2=AddProductBrandCall.callAndGetJsonRet(mm2);
			//响应断言
			Logger.verifyNotEquals(200, ret2.get("Code"), "返回值不为200");
			Logger.verifyNotEquals("操作成功", ret2.get("Msg"), "响应信息返回值Msg不为：操作成功");
			
		}catch (Exception e){
			Logger.fail(e);
		}
	}
}
